import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.SortedMap;

import javax.swing.DefaultListModel;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JList;
import java.awt.Font;
import java.awt.Color;

public class VueSaisieParution extends Vue {
	private JTextField textFieldIssn;
	private JTextField textFieldIdentificateur;
	private JTextField textFieldTitre;
	private JTextField textFieldPage;

	// pour que les boutons soient des attributs il faut faire "convert local to field" dans le windowbuilder pas a la main
	private JButton btnRechercher;
	private JButton btnValider;
	private JButton btnAjouter;
	private JButton btnTerminer;
	private JButton btnAnnulerFin;
	private JButton btnAnnulerParu;
	
	// à ajouter car la vue est observatrice d'un periodique
	private Periodique _periodique;
	private JButton btnAnnulerRech;
	
	//Pour permettre de rajouter les articles on d�clare une parution en global
	private Parution _parution;
	
	private JTextField textFieldTitreperio;
	private JLabel lblTitreDuPriodique;
	private JScrollPane scrollPaneMotcle;
	private JList listMotcle;
	private JScrollPane scrollPaneAuteur;
	private JList listAuteur;
	private JLabel lblMotCle;
	private JLabel lblAuteur;
	private JTextField textFieldMotcle;
	private JLabel lblAjout;
	private JTextField textFieldNom;
	private JLabel lblNom;
	private JButton btnAjoutAuteur;
	private JButton btnSuppressionAuteur;
	private JButton btnAjoutMotcle;
	private JButton btnSupprimerMotcle;
	private JTextField textFieldPrenom;
	private JLabel lblPrenom;
	
	DefaultListModel dlmMotcle = new DefaultListModel();
	DefaultListModel dlmAuteur = new DefaultListModel();

	
	
	public VueSaisieParution(Controleur controleur) {
		super(controleur);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setTitle("Saisir une parution");
		setBounds(100, 100, 616, 667);
		getContentPane().setLayout(null);
		
		JLabel lblIssn = new JLabel("Issn :");
		lblIssn.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblIssn.setBounds(133, 31, 61, 15);
		getContentPane().add(lblIssn);
		
		textFieldIssn = new JTextField();
		textFieldIssn.setBounds(252, 28, 114, 19);
		getContentPane().add(textFieldIssn);
		textFieldIssn.setColumns(10);
		
		btnRechercher = new JButton("Rechercher");
		btnRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String issn = textFieldIssn.getText();
				setPeriodique(getControleur().rechPeriodique(issn));
				
				if(getPeriodique() != null){
					textFieldTitreperio.setText(getPeriodique().getTitre());
				}
			}
		});
		btnRechercher.setBounds(337, 60, 107, 25);
		getContentPane().add(btnRechercher);
		
		btnAnnulerRech = new JButton("Annuler");
		btnAnnulerRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);
			}
		});
		btnAnnulerRech.setBounds(171, 60, 107, 25);
		getContentPane().add(btnAnnulerRech);
		

		
		
		
		
		JSeparator separator = new JSeparator();
		separator.setBounds(12, 108, 615, 2);
		getContentPane().add(separator);
		
		JLabel lblTitreIdentificateur = new JLabel("Identificateur de la Parution :");
		lblTitreIdentificateur.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblTitreIdentificateur.setBounds(60, 157, 182, 25);
		getContentPane().add(lblTitreIdentificateur);
		
		textFieldIdentificateur = new JTextField();
		textFieldIdentificateur.setFont(new Font("Dialog", Font.PLAIN, 12));
		textFieldIdentificateur.setBounds(252, 158, 114, 19);
		getContentPane().add(textFieldIdentificateur);
		textFieldIdentificateur.setColumns(10);
		
		btnAnnulerParu = new JButton("Annuler");
		btnAnnulerParu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);}
		});
		btnAnnulerParu.setBounds(171, 194, 107, 25);
		getContentPane().add(btnAnnulerParu);
		
		btnValider = new JButton("Valider");
		btnValider.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String identificateur = textFieldIdentificateur.getText();
				setParution(getControleur().nouvParution(getPeriodique(),identificateur));
				}
		});
		btnValider.setBounds(337, 194, 107, 25);
		getContentPane().add(btnValider);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(12, 242, 615, 2);
		getContentPane().add(separator_1);
		
		JLabel lbltitre = new JLabel("Titre de l'article : ");
		lbltitre.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lbltitre.setHorizontalAlignment(SwingConstants.CENTER);
		lbltitre.setBounds(118, 258, 106, 15);
		getContentPane().add(lbltitre);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(252, 255, 114, 19);
		getContentPane().add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		textFieldPage = new JTextField();
		textFieldPage.setBounds(252, 285, 114, 19);
		getContentPane().add(textFieldPage);
		textFieldPage.setColumns(10);
		
		JLabel lblPageDbut = new JLabel("Page debut :");
		lblPageDbut.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblPageDbut.setBounds(128, 288, 76, 15);
		getContentPane().add(lblPageDbut);
		
		btnAnnulerFin = new JButton("Annuler");
		btnAnnulerFin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);}
		});	
		btnAnnulerFin.setBounds(142, 593, 107, 25);
		getContentPane().add(btnAnnulerFin);
		
		btnAjouter = new JButton("Ajouter");
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String titre = textFieldTitre.getText();
				String p = textFieldPage.getText();
				int page = 0;
				if(p.length() != 0){
					page = Integer.parseInt(p);
				}
				
				// recuperation liste mots cles
				Object[] m =listMotcle.getSelectedValues();

				String[] mots = new String[m.length];
				for(int i = 0; i < m.length; i++){//transformation des objets en string
					mots[i] = m[i].toString().toLowerCase();
				}
				//recuperation liste auteurs
				m = listAuteur.getSelectedValues();
				String[] aus = new String[m.length];
				for(int i = 0; i < m.length; i++){
					aus[i] = m[i].toString().toLowerCase();
				}
				getControleur().nouvArticle(getParution(),titre,page,aus,mots);
			}
		});
		btnAjouter.setBounds(259, 593, 107, 25);
		getContentPane().add(btnAjouter);
		
		btnTerminer = new JButton("Quitter");
		btnTerminer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieParution.this);
			}
		});
		btnTerminer.setBounds(376, 593, 107, 25);
		getContentPane().add(btnTerminer);
		
		textFieldTitreperio = new JTextField();
		textFieldTitreperio.setForeground(new Color(205, 92, 92));
		textFieldTitreperio.setFont(new Font("Dialog", Font.BOLD, 12));
		textFieldTitreperio.setEditable(false);
		textFieldTitreperio.setBounds(252, 128, 114, 19);
		getContentPane().add(textFieldTitreperio);
		textFieldTitreperio.setColumns(10);
		
		lblTitreDuPriodique = new JLabel("Titre du Periodique :");
		lblTitreDuPriodique.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblTitreDuPriodique.setBounds(68, 131, 126, 15);
		getContentPane().add(lblTitreDuPriodique);
		
		scrollPaneMotcle = new JScrollPane();
		scrollPaneMotcle.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneMotcle.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneMotcle.setBounds(68, 350, 210, 100);
		getContentPane().add(scrollPaneMotcle);
		
		listMotcle = new JList(dlmMotcle);
		scrollPaneMotcle.setViewportView(listMotcle);
		
		scrollPaneAuteur = new JScrollPane();
		scrollPaneAuteur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneAuteur.setBounds(337, 350, 210, 100);
		getContentPane().add(scrollPaneAuteur);
		
		listAuteur = new JList(dlmAuteur);
		scrollPaneAuteur.setViewportView(listAuteur);
		
		lblMotCle = new JLabel("Mot cle :");
		lblMotCle.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblMotCle.setBounds(68, 323, 61, 15);
		getContentPane().add(lblMotCle);
		
		lblAuteur = new JLabel("Auteur :");
		lblAuteur.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblAuteur.setBounds(420, 323, 61, 15);
		getContentPane().add(lblAuteur);
		
		textFieldMotcle = new JTextField();
		textFieldMotcle.setBounds(158, 462, 121, 19);
		getContentPane().add(textFieldMotcle);
		textFieldMotcle.setColumns(10);
		
		lblAjout = new JLabel("Ajouter :");
		lblAjout.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblAjout.setBounds(68, 462, 61, 15);
		getContentPane().add(lblAjout);
		
		btnAjoutMotcle = new JButton("Ajout");
		btnAjoutMotcle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String s = textFieldMotcle.getText();
				getControleur().ajoutMotcle(s);
			}
		});
		btnAjoutMotcle.setBounds(188, 519, 91, 25);
		getContentPane().add(btnAjoutMotcle);
		
		btnSupprimerMotcle = new JButton("Suppression");
		btnSupprimerMotcle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] m =listMotcle.getSelectedValues();
				String[] mots = new String[m.length];
				String s;
				for(int i = 0; i < m.length; i++){
					s = (String)m[i];
					mots[i] = s.toLowerCase();
				}
				getControleur().supprimerMotcle(mots);
			}
		});
		btnSupprimerMotcle.setBounds(68, 519, 114, 25);
		getContentPane().add(btnSupprimerMotcle);
		
		textFieldNom = new JTextField();
		textFieldNom.setBounds(426, 462, 121, 19);
		getContentPane().add(textFieldNom);
		textFieldNom.setColumns(10);
		
		lblNom = new JLabel("Nom :");
		lblNom.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblNom.setBounds(337, 465, 61, 15);
		getContentPane().add(lblNom);
		
		btnAjoutAuteur = new JButton("Ajout");
		btnAjoutAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String n = textFieldNom.getText();
				String p = textFieldPrenom.getText();
				getControleur().ajoutAuteur(n, p);
			}
		});
		btnAjoutAuteur.setBounds(456, 519, 91, 25);
		getContentPane().add(btnAjoutAuteur);
		
		btnSuppressionAuteur = new JButton("Suppression");
		btnSuppressionAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] o = listAuteur.getSelectedValues();
				String[] noms = new String[o.length];
				for(int i = 0; i < o.length; i++){
					noms[i] = (String)o[i];
				}
				getControleur().supprimerAuteur(noms);
			}
		});
		btnSuppressionAuteur.setBounds(337, 519, 114, 25);
		getContentPane().add(btnSuppressionAuteur);
		
		textFieldPrenom = new JTextField();
		textFieldPrenom.setBounds(426, 489, 121, 19);
		getContentPane().add(textFieldPrenom);
		textFieldPrenom.setColumns(10);
		
		lblPrenom = new JLabel("Prenom :");
		lblPrenom.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblPrenom.setBounds(337, 496, 61, 15);
		getContentPane().add(lblPrenom);
		// TODO Auto-generated constructor stub
	}
	
	/*
	 * **********************seter/getter
	 */
	public void setPeriodique(Periodique periodique) {
		_periodique = periodique;
	}
	
	public Periodique getPeriodique() {
		return _periodique;
	}
	
	public void setParution(Parution parution){
		_parution = parution;
	}
	
	public Parution getParution() {
		return _parution;
	}
	/*********************************/
	
	/*
	 * (non-Javadoc)
	 * @see Vue#setEtat(int)
	 * Definition des etats de la vue
	 */
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			btnRechercher.setEnabled(true);
			btnValider.setEnabled(false);
			btnAjouter.setEnabled(false);
			btnTerminer.setEnabled(false);
			btnAnnulerFin.setEnabled(false);
			btnAnnulerParu.setEnabled(false);
			btnAnnulerRech.setEnabled(true);
			textFieldIdentificateur.setEditable(false);
			textFieldTitre.setEditable(false);
			textFieldPage.setEditable(false);
			textFieldMotcle.setEditable(false);
			textFieldNom.setEditable(false);
			textFieldPrenom.setEditable(false);
			textFieldTitre.setEditable(false);
			textFieldPage.setEditable(false);
			btnAjoutAuteur.setEnabled(false);;
			btnSuppressionAuteur.setEnabled(false);;
			btnAjoutMotcle.setEnabled(false);;
			btnSupprimerMotcle.setEnabled(false);;

			break;
			}
		case inter1: {
			btnRechercher.setEnabled(false);
			btnValider.setEnabled(true);
			btnAjouter.setEnabled(false);
			btnTerminer.setEnabled(false);
			btnAnnulerFin.setEnabled(false);
			btnAnnulerParu.setEnabled(true);
			btnAnnulerRech.setEnabled(false);
			textFieldIdentificateur.setEditable(true);
			textFieldTitre.setEditable(false);
			textFieldPage.setEditable(false);
			textFieldIssn.setEditable(false);
			textFieldMotcle.setEditable(false);
			textFieldNom.setEditable(false);
			textFieldPrenom.setEditable(false);
			textFieldTitre.setEditable(false);
			textFieldPage.setEditable(false);
			btnAjoutAuteur.setEnabled(false);;
			btnSuppressionAuteur.setEnabled(false);;
			btnAjoutMotcle.setEnabled(false);;
			btnSupprimerMotcle.setEnabled(false);;

			break;
			}
		case finale: {
			btnRechercher.setEnabled(false);
			btnValider.setEnabled(false);
			btnAjouter.setEnabled(true);
			btnTerminer.setEnabled(true);
			btnAnnulerFin.setEnabled(true);
			btnAnnulerParu.setEnabled(false);
			btnAnnulerRech.setEnabled(false);
			textFieldIdentificateur.setEditable(false);
			textFieldTitre.setEditable(true);
			textFieldPage.setEditable(true);
			textFieldIssn.setEditable(false);
			textFieldMotcle.setEditable(true);
			textFieldNom.setEditable(true);
			textFieldPrenom.setEditable(true);
			textFieldTitre.setEditable(true);
			textFieldPage.setEditable(true);
			btnAjoutAuteur.setEnabled(true);;
			btnSuppressionAuteur.setEnabled(true);;
			btnAjoutMotcle.setEnabled(true);;
			btnSupprimerMotcle.setEnabled(true);;

			break;
			}
		}
	}

	public void alimenteMotcle(SortedMap<String, Motcle> dico) {
		dlmMotcle.clear();
		textFieldMotcle.setText("");
		for (Motcle motcle : dico.values()) {
			dlmMotcle.addElement(motcle.getMotCle());
		}
	}
	
	public void alimenteAuteur(SortedMap<String, Auteur> dico) {
		dlmAuteur.clear();
		textFieldNom.setText("");
		textFieldPrenom.setText("");
		for (Auteur auteur : dico.values()) {
			dlmAuteur.addElement(auteur.getNom());
		}
	}
	
	public void nettoie(){
		textFieldMotcle.setText("");
		textFieldNom.setText("");
		textFieldPrenom.setText("");
		textFieldTitre.setText("");
		textFieldPage.setText("");
		listAuteur.clearSelection();
		listMotcle.clearSelection();
	}
	
}
